<?php

require_once 'Basic.php';

class CancelaReserva {
  
  private $list;
  private $dbFail;
  
  public function __construct($idReserva) {
    $this->idReserva = $idReserva;
    $this->list = new Report();
    $this->dbFail = false;
    $this->inexistent = false;
    $this->buildList();
  }
  
  private function buildList() {
    $db = new DBUtils();
    
    try {
      if(!isset($_GET["conf"]) || $_GET["conf"] === '0') {
        $db->connect();
        $db->runQuery("select * from TodasReservas where idReserva = ?", array($this->idReserva));
        
        $item = $db->getItem();
        if($item === null) {
          $this->inexistent = true;
          $db->close();
          return;
        }
        
        $listItem = new ReportItem("-");
        if($item->tipoCliente === "fisica") {
          $listItem->addLine("Nome do cliente", $item->nomeCliente);
        }
        else {
          if($item->tipoCliente === "juridica") {
            $listItem->addLine("Razao social do cliente", $item->razaoSocial);
          }
        }
        $listItem->addLine("Data/Hora prevista de início", $item->previsaoInicio->format('d/m/Y H:i'));
        $listItem->addLine("Data/Hora prevista de término", $item->previsaoTermino->format('d/m/Y H:i'));
        $listItem->addLine("Nome do modelo reservado", $item->nomeModelo);
        $listItem->addLine("Filial de obtenção", $item->nomeFilialObtencao);
        $listItem->addLine("Filial de devolução", $item->nomeFilialDevolucao);    
          
        $this->list->addItem($listItem);
        
        $db->close(true);
      }
    }
    catch(DBError $e) {
      $db->close();
      $this->dbFail = true;
      logMessage($e->errors, "CancelaReserva");
    }     
  }  
 
  public function getHtml() {
    if($this->dbFail) {
      return "<p>Falha ao acessar o banco de dados. O erro foi reportado.</p>";
    }
    else {
      return $this->list->getHtml();
    }
  }
}

mustBe(isset($_GET["idReserva"]));
$idReserva = intval($_GET["idReserva"]);

$goOn = false;
if(isLoggedAsClient()) {
  $idCliente = intval(userId());
  try {
    $goOn = Cliente::ownsReservation($idCliente, $idReserva);
  }
  catch(DBError $e) {
    logMessage($e->errors, "CancelaReserva");
    header("Location: index.php");
  }
}

mustBe(isLoggedAsEmployee() || $goOn);

$list = new CancelaReserva($idReserva);
$page = new Page("Cancelar Reserva");
$page->addContent($list->getHtml());

$html = <<<HTML
<p><br /><strong>Tem certeza que deseja cancelar?</strong> &nbsp;&nbsp;&nbsp; 
<a href='CancelaReserva.php?idReserva=${idReserva}&conf=1' class='menuLink'><span class='text'>Sim</span></a> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href='ReservaList.php' class='menuLink'><span class='text'>Não</span></a></p>
HTML;

if(isset($_GET["conf"]) && $_GET["conf"] === '1') {
  $db = new DBUtils();
  try{
    $db->connect();
    $db->runQuery("update Reserva set cancelada=1 where idReserva=?", array($idReserva));      
    $db->close(true);
    header("Location: ReservaList.php");
  }
  catch(DBError $e) {
    $db->close();
    logMessage($e->errors,"CancelaReserva");
    $page->addContent("<p class='errorMessage'>Falha ao acessar o banco de dados. O erro foi reportado.</p>");
  }
}
else {
  $page->addContent($html);
}

echo $page->getHtml();